//////////////////////////////////////////////////////////////////////////
// $Id: MData.cpp,v 1.1 2009/04/03 12:46:10 sunjun Exp $
//////////////////////////////////////////////////////////////////////////

#include "Local.h"

//////////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////////

NAMESPACE_BEGIN

//////////////////////////////////////////////////////////////////////////

	// the dynamic creator
	MIMPLEMENT_DYNCREATOR(MData)

	// dispatch map
	MBEGIN_DISPATCH_MAP(MData, MObject)
		MDISPATCH_FUNCTION(MData,	"size",		size,	(DARG0<U32>(&DARGFN0)))
		MDISPATCH_FUNCTION(MData,	"resize",	resize,	(DARG1<VOID,U32>(&DARGFN1)))	
	MEND_DISPATCH_MAP()

	//////////////////////////////////////////////////////////////////////////


	MData::MData()
	{
		GUARD(MData::MData);

		UNGUARD;
	}

	MData::~MData()
	{
		GUARD(MData::~MData);

		UNGUARD;
	}

	//////////////////////////////////////////////////////////////////////////

	/*
	====================
	set
	====================
	*/
	INLINE VOID	MData::set( const VOID* data, U32 size )
	{
		GUARD(MData::set);

		THREAD_AUTO_LOCK;
		CHECK(data&&size);
		mData.resize(size);
		memcpy( &mData[0], data, size );

		UNGUARD;
	}

	/*
	====================
	get
	====================
	*/
	INLINE const VOID * MData::get() const
	{
		GUARD(MData::get);

		THREAD_AUTO_LOCK;
		return &mData[0];

		UNGUARD;
	}

	/*
	====================
	size
	====================
	*/
	INLINE U32 MData::size() const
	{
		GUARD(MData::size);

		THREAD_AUTO_LOCK;
		return mData.size();

		UNGUARD;
	}

	/*
	====================
	resize
	====================
	*/
	INLINE VOID MData::resize( U32 size )
	{
		GUARD(MData::resize);

		THREAD_AUTO_LOCK;
		mData.resize( size );

		UNGUARD;
	}
	
//////////////////////////////////////////////////////////////////////////

NAMESPACE_END

//////////////////////////////////////////////////////////////////////////

